# Acceso remoto directo a memoria (RDMA) para dispositivos Intel® Ethernet

El Acceso directo remoto a la memoria, o RDMA por sus siglas en inglés, permite que un dispositivo de red transfiera datos directamente a y desde la memoria de aplicaciones en otro sistema, aumentando el rendimiento y disminuyendo la latencia en ciertos entornos de red.

- Los dispositivos Ethernet Intel® serie 800 son compatibles tanto con iWARP como con RoCEv2.
- Los dispositivos Ethernet Intel® serie X722 solo son compatibles con iWARP.

La diferencia principal es que iWARP realiza RDMA a través de TCP, mientras que RoCEv2 utiliza UDP.

En dispositivos con funciones RDMA, RDMA es compatible con los siguientes sistemas operativos:

- Linux*
- FreeBSD*
- VMware* ESXi*
- Microsoft* Windows Server*

Para evitar la degradación de rendimiento de los paquetes descartados, habilite el control de flujo o el control de flujo de prioridad en todas las interfaces de red y conmutadores.

| NOTAS: En sistemas que ejecutan el sistema operativo Microsoft Windows Server, la habilitación de *QoS/control de flujo de prioridad deshabilitará el control de flujo a nivel de enlace. Los dispositivos basados en Ethernet Intel® serie 800 no son compatibles con RDMA al operar en modo multipuerto con más de 4 puertos. En los sistemas Linux, no se admiten RDMA ni la unión. Si RDMA está habilitado, la unión no será funcional.

## RDMA en Linux o FreeBSD

Para dispositivos Ethernet Intel® que son compatibles con RDMA en Linux o FreeBSD, utilice los controladores que se muestran en la siguiente tabla.

Dispositivo | Linux | FreeBSD | Protocolos compatibles
--- | --- | --- | ---
Controlador base | Controlador RDMA | Controlador base | Controlador RDMA
Ethernet Intel® serie 800 | ice | irdma | ice | irdma | RoCEv2, iWARP
Ethernet Intel® serie X722 | i40e | irdma | ixl | iw_ixl | iWARP

##### Instrucciones de instalación básicas

A un alto nivel, instalar y configurar RDMA en Linux o FreeBSD consiste en los siguientes pasos. Consulte el archivo README dentro del tarball del controlador RDMA correspondiente para obtener más información.

1. Instale el controlador base.
2. Instale el controlador de RDMA.
3. Instale y aplique parches a las bibliotecas RDMA en modo de usuario. Los pasos exactos variarán según el sistema operativo; consulte el archivo README del controlador RDMA para obtener más información.
4. Habilite el control de flujo en su dispositivo. Consulte el archivo README del controlador base para obtener más información y modos compatibles.
5. Si utiliza RoCE, habilite el control de flujo (PFC o LFC) en el dispositivo y en el punto de conexión al que está conectado su sistema. Consulte la documentación de su conmutador y, para Linux, la Guía de configuración de control de flujo de Ethernet Intel® serie 800 para Linux para casos de uso de RDMA para obtener más información.

### RDMA para entornos virtualizados en Linux

Los dispositivos basados en Ethernet Intel serie 800 son compatibles con RDMA en un Linux VF en hosts compatibles Windows o Linux. Consulte el archivo LÉAME dentro del paquete tarball del controlador RDMA de Linux para obtener más información sobre cómo cargar y configurar RDMA en un Linux VF.

## RDMA en Microsoft Windows

### RDMA para aplicaciones de modo de usuario de Network Direct (ND)

Network Direct (ND) permite que las aplicaciones de modo de usuario utilicen características de RDMA.

| NOTA: Las aplicaciones en modo de usuario pueden tener requisitos previos, como Microsoft HPC Pack o Intel MPI Library; consulte la documentación de su aplicación para obtener más detalles.

#### Instalación del modo de usuario RDMA

El proveedor de RDMA en modo de usuario Ethernet Intel® es compatible con Microsoft Windows Server 2012 R2 y posteriores.

Siga los pasos indicados más abajo para instalar las características en modo de usuario de Network Direct.

1. Desde el soporte de instalación, ejecute Autorun.exe para iniciar el instalador y, a continuación, seleccione "Instalar controladores y software" y acepte el acuerdo de licencia.
2. En la pantalla Opciones de configuración, seleccione "Proveedor de RDMA en modo de usuario Ethernet Intel®".
3. En la pantalla Opciones de configuración de RDMA, seleccione "Habilitar enrutamiento de RDMA a través de subredes IP", si lo desea. Tenga en cuenta que esta opción se visualiza durante la instalación del controlador base, aunque no se haya seleccionado RDMA en modo de usuario, ya que esta opción es aplicable también a la funcionalidad de Network Direct Kernel.
4. Si Windows Firewall está instalado y activo, seleccione "Crear una regla del servicio de asignación de puertos RDMA de Ethernet Intel® en el firewall de Windows" y las redes a las que se aplicará la regla.

   | NOTA: Si el firewall de Windows está deshabilitado o utiliza un firewall de terceros, tendrá que añadir esta regla manualmente.

5. Continúe con la instalación del controlador y del software.

### RDMA Network Direct Kernel (NDK)

La funcionalidad RDMA Network Direct Kernel (NDK) está incluida en los controladores de red base de Intel y no requiere la instalación de características adicionales.

#### Enrutamiento de RDMA a través de subredes IP

Si desea habilitar la característica RDMA de NDK a través de subredes, tendrá que seleccionar "Habilitar enrutamiento de RDMA a través de subredes IP" en la pantalla Opciones de configuración de RDMA durante la instalación del controlador base.

### Activación del control de flujo basado en prioridades (PFC) en un sistema operativo Microsoft Windows Server

Para evitar la degradación de rendimiento de los paquetes descartados, habilite el control de flujo de prioridad (PFC) o el control de flujo de nivel de enlace en todas las interfaces y conmutadores de red.

| NOTA: en sistemas que ejecutan un sistema operativo de Microsoft Windows Server, habilitando el control de flujo *QoS/prioridad se desactivará el control de flujo de nivel de enlace.

Utilice los siguientes comandos PowerShell* para habilitar PFC en Microsoft Windows Server:

`Install-WindowsFeature -Name Data-Center-Bridging -IncludeManagementTools
New-NetQoSPolicy "SMB" -NetDirectPortMatchCondition 445 -PriorityValue8021Action 3
Enable-NetQosFlowControl -Priority 3
Disable-NetQosFlowControl -Priority 0,1,2,4,5,6,7
New-NetQosTrafficClass -Name "SMB" -Priority 3 -BandwidthPercentage 60 -Algorithm ETS
Set-NetQosDcbxSetting -Willing $FALSE
Enable-NetAdapterQos -Name "Slot1 4 2 Port 1"`

### Verificación del funcionamiento de RDMA con Microsoft PowerShell

Puede comprobar que RDMA esté habilitado en las interfaces de red mediante el siguiente comando de Microsoft PowerShell:

`Get-NetAdapterRDMA`

Use el siguiente comando de PowerShell para comprobar si las interfaces de red son compatibles con RDMA y si está habilitado el multicanal:

`Get-SmbClientNetworkInterface`

Use el siguiente comando de PowerShell para comprobar si Network Direct está habilitado en el sistema operativo:

`Get-NetOffloadGlobalSetting | Seleccionar NetworkDirect`

Use netstat para asegurarse de que cada interfaz de red compatible con RDMA tiene un receptor en el puerto 445 (los sistemas operativos cliente de Windows que admiten RDMA no pueden publicar escuchas). Por ejemplo:

`netstat.exe -xan | ? {$_ -match "445"}`

### RDMA para entornos virtualizados en Windows

Para habilitar la funcionalidad RDMA en adaptadores virtuales conectados a un VMSwitch, deberá:

- Habilitar las propiedades avanzadas de SR-IOV (virtualización de E/S de raíz única) y VMQ (colas de máquina virtual) en cada puerto.
- Establezca el número de VF que desea habilitar con funciones RDMA. Puede habilitar hasta 32 VF con funciones RDMA.

En determinadas circunstancias, podrá deshabilitar estos ajustes de forma predeterminada. Estas opciones se pueden establecer manualmente en el panel de configuración del adaptador de Intel® PROSet ACU, en la pestaña Opciones avanzadas del cuadro de diálogo de propiedades del adaptador, o con los siguientes comandos PowerShell:

`Set-NetAdapterAdvancedProperty -Name <nombre_nic> -RegistryKeyword *SRIOV -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nombre_nic> -RegistryKeyword *VMQ -RegistryValue 1`

`Set-NetAdapterAdvancedProperty -Name <nombre_nic> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <1-32>`

### Configuración del soporte de invitado de RDMA (modo NDK 3)

El modo NDK 3 permite que los componentes de Windows en modo de kernel utilicen las características de RDMA dentro de las particiones de invitados de Hyper-V. Para habilitar el modo NDK 3 en un dispositivo Ethernet Intel, haga lo siguiente:

1. Habilite SR-IOV en el BIOS o UEFI de su sistema.
2. Habilite el ajuste avanzado de SR-IOV en el dispositivo.
3. Habilite SR-IOV en el VMSwitch vinculado al dispositivo realizando lo siguiente para todas las funciones físicas en el mismo dispositivo:
   `New-VMSwitch -Name <nombre_conmutador> -NetAdapterName <nombre_dispositivo>`
   `-EnableIov $true`
4. Configure el número de funciones virtuales RDMA (VF) en el dispositivo estableciendo el ajuste avanzado "RdmaMaxVfsEnabled". Todas las funciones físicas se deben establecer en el mismo valor. El valor es la cantidad máxima de VF que pueden tener la capacidad de RDMA a la vez para todo el dispositivo. Al habilitar más VF se restringirán los recursos RDMA de las funciones físicas (PF) y otras VF.
   `Set-NetAdapterAdvancedProperty -Name <device_name> -RegistryKeyword RdmaMaxVfsEnabled -RegistryValue <Value: 0 - 32>`
5. Deshabilite todos los adaptadores PF en el host y vuelva a habilitarlos. Esto es necesario cuando se cambia la palabra clave de registro "RdmaMaxVfsEnabled" o cuando se crea o destruye un VMSwitch.
   `Get-NetAdapterRdma | Disable-NetAdapter`
   `Get-NetAdapterRdma | Enable-NetAdapter`
6. Cree adaptadores de red VM para máquinas virtuales que requieran soporte de RDMA VF.
   `Add-VMNetworkAdapter -VMName <nombre_vm> -VMNetworkAdapterName <nombre_dispositivo> -SwitchName <nombre_conmutador>`
7. Si planea usar la Actualización para creadores de Microsoft Windows 10 (RS2) o posterior en una partición invitada, establezca el peso de RDMA en el adaptador de red de VM introduciendo el siguiente comando en el host:
   `Set-VMNetworkAdapterRdma -VMName <nombre_vm> -VMNetworkAdapterName <nombre_dispositivo> -RdmaWeight 100`
8. Establezca el peso de SR-IOV en el adaptador de red VM (Nota: el peso de SR-IOV debe establecerse en 0 antes de configurar RdmaWeight en 0):
   `Set-VMNetworkAdapter -VMName <nombre_vm> -VMNetworkAdapterName <nombre_dispositivo> -IovWeight 100`
9. Instale el adaptador de red VF con el instalador PROSET en la máquina virtual.
10. Habilite RDMA en el controlador de VF y el adaptador de red de Hyper-V utilizando PowerShell en la máquina virtual:
    `Set-NetAdapterAdvancedProperty -Name <nombre_dispositivo> -RegistryKeyword RdmaVfEnabled -RegistryValue 1`
    `Get-NetAdapterRdma | Enable-NetAdapterRdma`

### Características de RDMA para NDK como SMB Direct (Bloque de mensajes del servidor)

NDK permite que los componentes de Windows (como el almacenamiento SMB Direct) utilicen características de RDMA.

#### Prueba de NDK: Microsoft Windows SMB Direct con DiskSPD

Esta sección describe una forma recomendada de probar RDMA para la funcionalidad y el rendimiento de Ethernet Intel en los sistemas operativos Microsoft Windows.

Tenga en cuenta que, dado que SMB Direct es una carga de trabajo de almacenamiento, el rendimiento de la prueba de referencia puede estar limitado a la velocidad del dispositivo de almacenamiento en lugar de a la interfaz de red que se está probando. Intel recomienda utilizar el almacenamiento más rápido posible para probar las prestaciones reales de los dispositivos de red sometidos a prueba.

Instrucciones de prueba:

1. Configure y conecte al menos dos servidores que ejecuten un sistema operativo Microsoft Windows Server compatible, con al menos un dispositivo Ethernet Intel® compatible con RDMA por servidor.
2. En el sistema designado como servidor SMB, configure un recurso compartido SMB. Tenga en cuenta que el rendimiento de la prueba de referencia puede estar limitado a la velocidad del dispositivo de almacenamiento en lugar de a la interfaz de red que se está probando. La configuración de almacenamiento está fuera del ámbito de este documento. Puedes usar el siguiente comando de PowerShell:
   `New-SmbShare -Name <nombre_rec_compartido_SMB> -Path <ruta_archivo_rec_compartido_SMB> -FullAccess <nombre_dominio>\Administrator,Everyone`
   Por ejemplo:
   `New-SmbShare -Name RAMDISKShare -Path R:\RAMDISK -FullAccess group\Administrator,Everyone`
3. Descargue e instale la utilidad de Microsoft Diskspd desde aquí: https://gallery.technet.microsoft.com/DiskSpd-a-robust-storage-6cd2f223
4. Mediante CMD o Powershell, ejecute cd a la carpeta DiskSpd y ejecute las pruebas. (Consulte la documentación de Diskspd para obtener más detalles sobre los parámetros)
   Por ejemplo, establezca el tamaño de bloque en 4K, ejecute la prueba durante 60 segundos, deshabilite todo el almacenamiento en memoria caché de hardware y software, mida y muestre las estadísticas de latencia, aproveche 16 E/S superpuestas y 16 subprocesos por destino, 0 % escrituras al azar y 100 % lecturas y cree un archivo de prueba de 10 GB en "\\<SMBserverTestIP>\<SMBsharename>\test.dat" :
   `.\diskspd.exe -b4K -d60 -h -L -o16 -t16 -r -w0 -c10G \\<SMBserverTestIP>\<SMBsharename>\test.dat`
5. Verifique que el tráfico de RDMA se esté ejecutando utilizando contadores de perfmon como "Actividad RDMA" y "Conexión directa SMB". Consulte la documentación de Microsoft para obtener más detalles.

## Asistencia al cliente

- - Sitio principal de soporte web de Intel: http://support.intel.com
- - Información sobre productos de red: http://www.intel.com/network

## Cuestiones legales / Exenciones de responsabilidad

Copyright (C) 2019 - 2022, Intel Corporation. Todos los derechos reservados.

Intel Corporation no asume ninguna responsabilidad por los errores y omisiones en esta guía. Del mismo modo, Intel no se compromete de ninguna forma a actualizar la información aquí contenida.

Intel es una marca comercial de Intel Corporation en los Estados Unidos y en otros países.

* Otros nombres y marcas pueden ser reclamados como propiedad de terceras partes.

Este software se proporciona bajo licencia y sólo se puede utilizar o copiar según los términos de la licencia. La información de este manual se ofrece sólo como referencia, está sujeta a cambios sin previo aviso y no debe interpretarse como un compromiso por parte de Intel Corporation. Intel Corporation no asumirá responsabilidad alguna por los errores o inexactitudes que aparezcan en este documento o en cualquier software que pueda proporcionarse en relación con este documento. Excepto tal y como lo permite dicha licencia, ninguna parte de este documento podrá ser reproducida, almacenada en un sistema de recuperación o transmitida en ningún formato o por ningún medio sin el consentimiento escrito expreso de Intel Corporation.